package version;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
.
/**
 * 封装
 * Mysql封装工具类：链接对应数据库
 * 1.Mysql与Oracle具备：url、username,password
 *  所有数据库公用的定义为属性
 * 2.getParam(String 路径)获取参数方法：链接成功数据库操作
 *   2.1 外置文件【url、账号、密码】统一配置文件中【形式:键值对】
 *       db_mysql.properties  对应 Java Properties类读取文件键值对
 */
public class Mysql {
    //1.定义数据库基本属性：私有化静态属性   类直接调取属性
    private static String url;
    private static String username;
    private static String password;
    //2.定义方法：链接成功数据库     文件路径传入
    public static void getParam(String fileName) throws IOException {
        //2.1读取db_mysql.properties文件--Properties类读取文件键和值
        Properties p=new Properties();
        //2.1[补充2]低级流--搬运数据--传入fileName
        //Mysql.class 表示当前Mysql类的Class对象
        //理解：图书馆---mysql书籍区域
        //getClassLoader() 获取当前类的加载器【加载器：根据路径执行配置文件】
        //理解：图书馆---mysql书籍区域----找管理员
        //getResourceAsStream() 通过类的加载器，找到对应的文件，配合读取
        //理解：图书馆---mysql书籍区域----找管理员---找到对应【db_mysql.properties】书籍
        InputStream fis=
                Mysql.class.getClassLoader().getResourceAsStream(fileName);
        //2.1[补充1]Properties类提供load()方法：必须传入流--低级流--搬运数据
        p.load(fis);
        //2.2 从db_mysql.properties读取的键值对信息【url、用户、密码】，
        //Properties类提供方法getProperty("键") 通过键找值
        // 赋值给当前Mysql的数据库基本信息【url、用户、密码】
        url=p.getProperty("url");
        username=p.getProperty("username");
        password=p.getProperty("password");
        //2.3打桩 测试是否链接成功
        System.out.println("数据库基本信息："+url+username+password);
    }
    //3.测试工具类--链接成功数据库【外置文件--配置Mysql基本信息】
    public static void main(String[] args) throws IOException, SQLException {
        Mysql.getParam("db_mysql.properties");
        //作业2：参考Mysql工具类--编写Oracle工具类  10分钟
        // 目的：工具类--链接成功不同的数据库【外置文件基本信息配置不同】
        import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import java.io.FileInputStream;
import java.io.IOException;

        public class OracleUtils {
            private static String url;
            private static String user;
            private static String password;

            static {
                Properties props = new Properties();
                try {
                    props.load(new FileInputStream("oracle.properties"));
                    url = props.getProperty("url");
                    user = props.getProperty("user");
                    password = props.getProperty("password");
                    Class.forName("oracle.jdbc.driver.OracleDriver");
                } catch (IOException | ClassNotFoundException e) {
                    e.printStackTrace();
                }
            }

            public static Connection getConnection() throws SQLException {
                return DriverManager.getConnection(url, user, password);
            }
        }
        //作业3：【增加一条操作---mi库--book】  查询
        //JDBC：Connection、Statement|          ResultSet
        import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;

        public class JdbcExample {
            // JDBC URL, username, and password of MySQL server
            private static final String URL = "jdbc:mysql://localhost:3306/mi";
            private static final String USER = "your_username";
            private static final String PASSWORD = "your_password";

            // JDBC variables for opening and managing connection
            private static Connection connection;

            public static void main(String[] args) {
                try {
                    // Opening database connection to MySQL server
                    connection = DriverManager.getConnection(URL, USER, PASSWORD);

                    // Creating statement object to execute query
                    Statement statement = connection.createStatement();

                    // SQL query to select all data from book table
                    String sql = "SELECT * FROM book";

                    // Executing query and getting result set
                    ResultSet resultSet = statement.executeQuery(sql);

                    // Processing the result set
                    while (resultSet.next()) {
                        // Assuming the book table has columns: id, title, author
                        int id = resultSet.getInt("id");
                        String title = resultSet.getString("title");
                        String author = resultSet.getString("author");

                        // Displaying values from result set
                        System.out.print("ID: " + id);
                        System.out.print(", Title: " + title);
                        System.out.println(", Author: " + author);
                    }

                    // Closing the result set
                    resultSet.close();

                    // Closing the statement
                    statement.close();

                } catch (SQLException e) {
                    // Handling any SQL exceptions
                    e.printStackTrace();
                } finally {
                    // Closing the connection
                    try {
                        if (connection != null && !connection.isClosed()) {
                            connection.close();
                        }
                    } catch (SQLException ex) {
                        ex.printStackTrace();
                    }
                }
            }
        }
        //1.创建数据库链接操作
        Connection con =
                DriverManager.getConnection(url,username,password);
        //2.执行sql--创建成功数据库
        String sql=
                "insert into book values(6,'余华','活着',35,'2023年',90,'否')";
        Statement st =con.createStatement();
        //增删改  executeUpdate() 返回成功几条记录
        int rows=st.executeUpdate(sql);
        System.out.println("book表添加了"+rows+"条记录");
    }
    //
}